package com.ruoyi.basebill.service.impl.billIssue.helper;

import com.ruoyi.basebill.domain.*;
import com.ruoyi.basebill.service.impl.billIssue.util.BillIssueUtil;
import com.ruoyi.basedata.domain.WfzBank;
import com.ruoyi.basedata.domain.WfzBankentry;
import com.ruoyi.basedata.mapper.WfzBankMapper;
import com.ruoyi.basedata.service.IWfzBankService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * @projectName: wfz
 * @package: com.ruoyi.basebill.service.impl.billIssue.util
 * @className: SbclHelper
 * @author: Eric
 * @description: TODO
 * @date: 2023/3/13 17:26
 * @version: 1.0
 */
@Component
public class SbclHelper {

    @Autowired
    private BillIssueUtil billIssueUtil;

    @Autowired
    private IWfzBankService wfzBankService;




    public WfzSbjr judIsBill(String sbdw, ArrayList<WfzSbjr> wfzSbjrs){
        WfzSbjr wfzSbjr = null;
        for (WfzSbjr sbjr : wfzSbjrs) {
            String fcompany = sbjr.getFcompany();
            if(sbdw.equals(fcompany)){
                wfzSbjr =sbjr;
                break;
            }
        }
        return  wfzSbjr;
    }

    /**
     *
     * @param tWfzRemunerationentry 薪酬总表
     * @param sbsjsentry 社保实际数录入entry
     * @param sbjrentry 社保分录
     */
    public void mergeJr(TWfzRemunerationentry tWfzRemunerationentry,WfzSbsjsentry sbsjsentry,WfzSbjrentry sbjrentry){
        BigDecimal fylbx = tWfzRemunerationentry.getFylbx();//养老保险
        BigDecimal fyybx = tWfzRemunerationentry.getFyybx();//医疗保险
        BigDecimal fsyubx = tWfzRemunerationentry.getFsyubx();//生育保险
        BigDecimal fsybx = tWfzRemunerationentry.getFsybx();//失业保险
        BigDecimal fgsbx = tWfzRemunerationentry.getFgsbx(); //工伤保险
        BigDecimal fgryl = tWfzRemunerationentry.getFgryl();//个人养老
        BigDecimal fgryy = tWfzRemunerationentry.getFgryy();//个人医疗
        BigDecimal fgrsy = tWfzRemunerationentry.getFgrsy();//个人失业



        sbjrentry.setFylbx(sbjrentry.getFylbx().add(fylbx));//养老保险
        sbjrentry.setFyybx(sbjrentry.getFyybx().add(fyybx));//医疗保险
        sbjrentry.setFsybx(sbjrentry.getFsybx().add(fsyubx));//生育保险
        sbjrentry.setFssbx(sbjrentry.getFssbx().add(fsybx));//失业保险
        sbjrentry.setFgsbx(sbjrentry.getFgsbx().add(fgsbx));//工伤保险
        sbjrentry.setFgryl(sbjrentry.getFgryl().add(fgryl));//个人养老
        sbjrentry.setFgryy(sbjrentry.getFgryy().add(fgryy));//个人医疗
        sbjrentry.setFgrsy(sbjrentry.getFgrsy().add(fgrsy));//个人失业
        if(sbsjsentry!=null){
            BigDecimal fylbxce = sbsjsentry.getFylbx();//养老保险差额
            BigDecimal fsybxce = sbsjsentry.getFsybx();//生育保险差额
            BigDecimal fyybxce = sbsjsentry.getFyybx();//医疗保险
            BigDecimal fssbxce = sbsjsentry.getFssbx();//失业保险差额
            BigDecimal fgsbxce = sbsjsentry.getFgsbx();//工伤保险差额

            sbjrentry.setFylbxce(sbjrentry.getFylbxce().add(fylbxce));//养老保险差额
            sbjrentry.setFyybxce(sbjrentry.getFyybxce().add(fsybxce));//医疗保险差额
            sbjrentry.setFsybxce(sbjrentry.getFsybxce().add(fyybxce));//生育保险差额
            sbjrentry.setFssbxce(sbjrentry.getFssbxce().add(fssbxce));//失业保险差额
            sbjrentry.setFgsbxce(sbjrentry.getFgsbx().add(fgsbxce));//工伤保险差额
        }
    }

    public void addSbjrEntry(TWfzRemunerationentry tWfzRemunerationentry,WfzSbjrentry wfzSbjrentry,WfzSbsjsentry sbsjsentry,String fsscompany,String fsscost,String fcostname,String fcostcompany,String fcosttype,String fpzz, String fbanknumber){
        String jsfs = billIssueUtil.Jsfs(fsscompany, fsscost);//组织间结算方式
        //如果不存在新建一个工资发放队
        BigDecimal fylbx = tWfzRemunerationentry.getFylbx();//养老保险
        BigDecimal fyybx = tWfzRemunerationentry.getFyybx();//医疗保险
        BigDecimal fsyubx = tWfzRemunerationentry.getFsyubx();//生育保险
        BigDecimal fsybx = tWfzRemunerationentry.getFsybx();//失业保险
        BigDecimal fgsbx = tWfzRemunerationentry.getFgsbx(); //工伤保险
        BigDecimal fgryl = tWfzRemunerationentry.getFgryl();//个人养老
        BigDecimal fgryy = tWfzRemunerationentry.getFgryy();//个人医疗
        BigDecimal fgrsy = tWfzRemunerationentry.getFgrsy();//个人失业


        wfzSbjrentry.setFylbx(fylbx);//养老保险
        wfzSbjrentry.setFyybx(fyybx);//医疗保险
        wfzSbjrentry.setFsybx(fsyubx);//生育保险
        wfzSbjrentry.setFssbx(fsybx);//失业保险
        wfzSbjrentry.setFgsbx(fgsbx);//工伤保险
        wfzSbjrentry.setFgryl(fgryl);//个人养老
        wfzSbjrentry.setFgryy(fgryy);//个人医疗
        wfzSbjrentry.setFgrsy(fgrsy);//个人失业
        if(sbsjsentry!=null){
            BigDecimal fylbxce = sbsjsentry.getFylbx();//养老保险差额
            BigDecimal fsybxce = sbsjsentry.getFsybx();//生育保险差额
            BigDecimal fyybxce = sbsjsentry.getFyybx();//医疗保险
            BigDecimal fssbxce = sbsjsentry.getFssbx();//失业保险差额
            BigDecimal fgsbxce = sbsjsentry.getFgsbx();//工伤保险差额

            wfzSbjrentry.setFylbxce(fylbxce);//养老保险差额
            wfzSbjrentry.setFyybxce(fsybxce);//医疗保险差额
            wfzSbjrentry.setFsybxce(fyybxce);//生育保险差额
            wfzSbjrentry.setFssbxce(fssbxce);//失业保险差额
            wfzSbjrentry.setFgsbxce(fgsbxce);//工伤保险差额
        }

        //拼接分录


        wfzSbjrentry.setFcostname(fcostname);
        wfzSbjrentry.setFcostnumber(fsscost);
        wfzSbjrentry.setFcostcompany(fcostcompany); //c成本中心所属财务组织
        wfzSbjrentry.setFjsfs(jsfs);  //结算方式

        wfzSbjrentry.setFcbzxxz(fcosttype); //成本中心属性
        wfzSbjrentry.setFvourtype(fpzz); //凭证字
        wfzSbjrentry.setFbanknum(fbanknumber); //银行账号

        wfzSbjrentry.setFisdy(tWfzRemunerationentry.getFissbdy()); //是否当月；
        wfzSbjrentry.setFislz(tWfzRemunerationentry.getFislz()); //是否离职
    }

    public String getBankNumBycomany(String fsscompany,String BillType){
        WfzBank wfzBank = new WfzBank();
        String fbanknumber = null;
        wfzBank.setFcompanynumber(fsscompany);
        wfzBank.setFtype(BillType);
        List<WfzBank> wfzBanks = wfzBankService.selectWfzBankList(wfzBank);
        if (wfzBanks.size()>0){
            WfzBank bank = wfzBanks.get(0);
            Long fid = bank.getFid();
            List<WfzBankentry> wfzBankentryList = wfzBankService.selectWfzBankByFid(fid).getWfzBankentryList();
            if (wfzBankentryList.size()>0){
                WfzBankentry wfzBankentry = wfzBankentryList.get(0);
                fbanknumber= wfzBankentry.getFbanknumber();
            }
        }

        return fbanknumber;
    }

}
